package com.micai.springboot.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;

import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

/**
 * 描述：
 * <p>
 *
 * @author: 赵新国
 * @date: 2018/4/10 17:53
 */
@Component
public class HelloWorldService {

    private static final Logger LOGGER = LoggerFactory.getLogger(HelloWorldService.class);

    /**
     * 同步方法
     */
    public void getTest2() {
        synchronized (this) {
            try {
                for (int i = 1; i <= 100; i++) {
                    LOGGER.info(Thread.currentThread().getName() + "----------同步：>" + i);
                    Thread.sleep(200);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    /**
     * 异步方法
     * 有@Async注解的方法，默认就是异步执行的，会在默认的线程池中执行，但是此方法不能在本类调用；启动类需添加直接开启异步执行@EnableAsync。
     * */
    @Async
    public Future<String> getTest4() {
        synchronized (this){
            try {
                for (int i = 1;i <= 100;i++){
                    LOGGER.info("=========》当前线程名：" + Thread.currentThread().getName()+"----------异步：>"+i);
                    Thread.sleep(200);
                }
                LOGGER.info("执行异步任务完毕");
            }catch (Exception ex){
                ex.printStackTrace();
            }
        }
        return new AsyncResult<>("执行异步任务完毕");
    }

}
